package com.haixiaoke.saas.user.service;

import com.haixiaoke.saas.common.core.domain.AjaxResult;
import com.haixiaoke.saas.system.domain.LoginBody;
import com.haixiaoke.saas.system.domain.LoginUser;
import com.haixiaoke.saas.user.domain.BizTenantUser;
import com.haixiaoke.saas.user.domain.BizUserBusiness;

import java.util.List;

/**
 * B端用户表Service接口
 *
 * @author panda
 * @date 2023-11-14
 */
public interface IBizUserBusinessService {
    /**
     * 查询B端用户表
     *
     * @param userId B端用户表主键
     * @return B端用户表
     */
    BizUserBusiness selectBizUserBusinessByUserId(Long userId, String tenantId);

    /**
     * 查询B端用户表列表
     *
     * @param bizUserBusiness B端用户表
     * @return B端用户表集合
     */
    List<BizUserBusiness> selectBizUserBusinessList(BizUserBusiness bizUserBusiness);

    /**
     * 新增B端用户表
     *
     * @param bizUserBusiness B端用户表
     * @return 结果
     */
    int insertBizUserBusiness(BizUserBusiness bizUserBusiness);

    /**
     * 修改B端用户表
     *
     * @param bizUserBusiness B端用户表
     * @return 结果
     */
    int updateBizUserBusiness(BizUserBusiness bizUserBusiness);

    /**
     * 批量删除B端用户表
     *
     * @param userIds 需要删除的B端用户表主键集合
     * @return 结果
     */
     int deleteBizUserBusinessByUserIds(Long[] userIds);

    /**
     * 删除B端用户表信息
     *
     * @param depUser B端用户表主键
     * @return 结果
     */
     int deleteBizUserBusinessByUserId(BizTenantUser depUser);

    BizUserBusiness selectBizUserBusinessByUserName(String username);

    /**
     * 校验用户名称是否唯一
     *
     * @param user 用户信息
     * @return 结果
     */
    boolean checkUserNameUnique(BizUserBusiness user);

    /**
     * 校验手机号码是否唯一
     *
     * @param user 用户信息
     * @return 结果
     */
    boolean checkPhoneUnique(BizUserBusiness user);

    /**
     * 校验email是否唯一
     *
     * @param user 用户信息
     * @return 结果
     */
    boolean checkEmailUnique(BizUserBusiness user);

    /**
     * 查询该租户下是否有其它用户
     * @param tenantId
     * @return
     */
    boolean checkUserByTenantId(String tenantId);

    /**
     * 根据条件分页查询已分配用户角色列表
     *
     * @param user 用户信息
     * @return 用户信息集合信息
     */
    List<BizUserBusiness> selectAllocatedList(BizUserBusiness user);

    /**
     * 根据条件分页查询未分配用户角色列表
     *
     * @param user 用户信息
     * @return 用户信息集合信息
     */
    List<BizUserBusiness> selectUnallocatedList(BizUserBusiness user);

    String importUser(List<BizUserBusiness> userList, Boolean updateSupport, String operName);

    void checkUserDataScope(Long userId);

    /**
     * 修改用户密码
     * @param user
     * @return
     */
    int updateBizUserPassword(BizUserBusiness user);

    List<BizUserBusiness> selectUserBusListByDep(BizUserBusiness user);

    int updateUserBusState(BizUserBusiness bizUser);

    List<BizUserBusiness> selectUserBusListByDepUser(BizUserBusiness user);

    /**
     * 根据号码查询用户
     *
     * @param phonenumber
     * @return
     */
    BizUserBusiness selectBizUserBusinessByphonenumber(String phonenumber, String tenantId);

    BizUserBusiness selectBizUserByPhonenumber(String phonenumber);

    AjaxResult checkUser(String phonenumber);

    boolean updateUserAvatar(Long userId, String avatar);

    /**
     * 微信小程序登录
     *
     * @param loginBody
     * @return
     */
    LoginUser weChatSelectUserByPhone(LoginBody loginBody);

    /**
     * 修改用户信息
     */
    int updateBizUser(BizUserBusiness user);
}
